import pandas as pd

# 1) 修改为你的文件路径（当前指向你这次上传的文件）
input_path = "../data/Titanic/titanic_test1.csv"
output_path = "../data/Titanic/titanic_test2.csv"  # 可选输出

# 2) 读入
df = pd.read_csv(input_path)

# 3) 先把所有 object 字段中形如 TRUE/FALSE 的布尔字符串统一成 1/0（其余保持不变）
for col in df.select_dtypes(include=["object"]).columns:
    # 去掉首尾空格并转小写，便于比对
    uniq = set(df[col].dropna().astype(str).str.strip().str.lower().unique())
    if uniq.issubset({"true", "false"}):
        df[col] = (
            df[col]
            .astype(str).str.strip().str.lower()
            .map({"true": 1, "false": 0})
            .astype("Int64")  # 保留缺失时的整型（可改为 int）
        )

# 4) Sex → 0/1（若列存在且仍为字符串）
if "Sex" in df.columns:
    # 仅对仍为字符串/分类的 Sex 进行映射；若之前已是数值则不会改变
    if df["Sex"].dtype == "object":
        df["Sex"] = (
            df["Sex"]
            .astype(str).str.strip().str.lower()
            .map({"male": 0, "female": 1})
        )

# 5) Embarked → One-Hot（若列存在且为字符串）
if "Embarked" in df.columns and df["Embarked"].dtype == "object":
    embarked_ohe = pd.get_dummies(df["Embarked"].astype(str).str.strip(),
                                  prefix="Embarked", drop_first=False)
    df = pd.concat([df.drop(columns=["Embarked"]), embarked_ohe], axis=1)

# 6) Title → One-Hot（若列存在且为字符串）
if "Title" in df.columns and df["Title"].dtype == "object":
    title_ohe = pd.get_dummies(df["Title"].astype(str).str.strip(),
                               prefix="Title", drop_first=False)
    df = pd.concat([df.drop(columns=["Title"]), title_ohe], axis=1)

# 7) 预览前 5 行与列名
print("列名：", df.columns.tolist())
print("\n前 5 行：\n", df.head())

# 8) 可选：落盘保存（如需写文件，取消下一行注释）
df.to_csv(output_path, index=False)
print(f"\n已保存：{output_path}")
